package com.lzc.jobrecomendbackend.utils;

import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;

/**
 * 技能关键词提取工具类
 */
public class SkillExtractor {

    // 预定义的技能关键词集合
    private static final Set<String> SKILL_KEYWORDS = new HashSet<>(Arrays.asList(
            "Java", "Python", "C++", "C#", "JavaScript", "TypeScript", "Go", "Golang", "PHP", "Ruby",
            "Swift", "Kotlin", "Rust", "Scala", "Perl", "Shell", "SQL", "NoSQL", "HTML", "CSS",
            "React", "Vue", "Angular", "jQuery", "Node.js", "Express", "Spring", "SpringBoot", "SpringCloud",
            "Hibernate", "MyBatis", "Django", "Flask", "Laravel", "ThinkPHP", "Gin", "Beego", "Rails",
            "MySQL", "Oracle", "SQL Server", "PostgreSQL", "MongoDB", "Redis", "Elasticsearch", "Memcached",
            "Docker", "Kubernetes", "微服务", "分布式", "云计算", "大数据", "人工智能", "机器学习", "深度学习", "数据挖掘",
            "数据分析", "自然语言处理", "NLP", "计算机视觉", "CV", "推荐系统", "搜索引擎", "Linux", "Unix", "Windows",
            "Android", "iOS", "小程序", "Web开发", "移动开发", "全栈", "前端", "后端", "测试", "运维", "DevOps",
            "CI/CD", "Git", "SVN", "敏捷开发", "Scrum", "产品经理", "UI", "UE", "用户体验", "设计", "算法",
            "数据结构", "网络", "安全", "区块链", "游戏开发", "嵌入式", "物联网", "IoT", "5G", "运营", "市场",
            "销售", "客服", "财务", "人力资源", "HR", "行政", "法务"
    ));

    /**
     * 从职位名称中提取技能关键词
     *
     * @param jobTitle 职位名称
     * @return 提取的技能关键词列表
     */
    public static List<String> extractSkills(String jobTitle) {
        if (jobTitle == null || jobTitle.isEmpty()) {
            return Collections.emptyList();
        }

        // 简单实现：检查职位名称中是否包含预定义的技能关键词
        return SKILL_KEYWORDS.stream()
                .filter(keyword -> jobTitle.toLowerCase().contains(keyword.toLowerCase()))
                .collect(Collectors.toList());
    }

    /**
     * 从多个职位名称中提取技能组合
     *
     * @param jobTitles 职位名称列表
     * @return 提取的技能组合
     */
    public static List<Set<String>> extractSkillCombinations(List<String> jobTitles) {
        return jobTitles.stream()
                .map(SkillExtractor::extractSkills)
                .filter(skills -> skills.size() > 1) // 只保留包含多个技能的组合
                .map(HashSet::new)
                .collect(Collectors.toList());
    }
} 